/**
 * Contient un workflow complet.
 */
package ch.ifage.business.dom;

import java.io.Serializable;

/**
 * @author Christian
 *
 */
public class Workflow implements Serializable {

	/**
	 * serial id.
	 */
	private static final long serialVersionUID = 5987971314479749192L;
	
	/**
	 * Première étape d'un workflow.
	 */
	private final FirstStep firstStep;

	/**
	 * @param firstStep premier traitement d'un workflow.
	 */
	public Workflow(final FirstStep firstStep) {
		this.firstStep = firstStep;
	}

	/**
	 * @return the firstStep
	 */
	public final FirstStep getFirstStep() {
		return firstStep;
	}

	/**
	 * Indique si une chaîne de cractères se trouve dans les log des descendants.
	 * @param subStringOfLog sous chaîne à rechercher dans la log.
	 * @return booléen indiquant la présence de la chaîne.
	 */
	public final boolean logContainsSubString(final String subStringOfLog) {
		boolean result = this.firstStep.getProperties().getLog().toLowerCase().contains(subStringOfLog);
		if (result) {
			return result;
		} else {
			Integer childIndex = this.firstStep.getListOfChild().size();
			while (!result && (childIndex > 0)) {
				childIndex -= 1;
				result = this.firstStep.getListOfChild().get(childIndex).logContainsSubString(subStringOfLog);
			}
			return result;
		}
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Workflow (firstStep=" + firstStep + ")\n";
	}
	
}
